home *** CD-ROM | disk | FTP | other *** search
-
-
-
- IEEE Mathematical Library Procedures IEEE
-
-
-
- NNAAMMEE
- copysign, drem, finite, logb, scalb - copysign, remainder,
- exponent manipulations
-
- SSYYNNOOPPSSIISS
- ##iinncclluuddee <<mmaatthh..hh>>
-
- ddoouubbllee ccooppyyssiiggnn((xx,,yy))
- ddoouubbllee xx,,yy;;
-
- ddoouubbllee ddrreemm((xx,,yy))
- ddoouubbllee xx,,yy;;
-
- iinntt ffiinniittee((xx))
- ddoouubbllee xx;;
-
- ddoouubbllee llooggbb((xx))
- ddoouubbllee xx;;
-
- ddoouubbllee ssccaallbb((xx,,nn))
- ddoouubbllee xx;;
- iinntt nn;;
-
- DDEESSCCRRIIPPTTIIOONN
- These functions are required for, or recommended by the IEEE
- standard 754 for floating-point arithmetic.
-
- Copysign(x,y) returns x with its sign changed to y's.
-
- Drem(x,y) returns the remainder r := x - n*y where n is the
- integer nearest the exact value of x/y; moreover if
- |n-x/y|=1/2 then n is even. Consequently the remainder is
- computed exactly and |r| <_ |y|/2. But drem(x,0) is excep-
- tional; see below under DIAGNOSTICS.
-
- Finite(x) = 1 just when -infinity < x < +infinity,
- = 0 otherwise (when |x| = infinity or x is _N_a_N or
- x is the VAX's reserved operand.)
-
- Logb(x) returns x's exponent n, a signed integer converted
- to double-precision floating-point and so chosen that
- 1 <_ |x|/2**n < 2 unless x = 0 or (only on machines that con-
- form to IEEE 754) |x| = infinity or x lies between 0 and the
- Underflow Threshold; see below under "BUGS".
-
- Scalb(x,n) = x*(2**n) computed, for integer n, without first
- computing 2**n.
-
- DDIIAAGGNNOOSSTTIICCSS
- IEEE 754 defines drem(x,0) and drem(infinity,y) to be
- invalid operations that produce a _N_a_N. On a VAX, drem(x,0)
- returns the reserved operand. No infinity exists on a VAX.
-
-
-
- Sprite v1.0 May 12, 1986 1
-
-
-
-
-
-
- IEEE Mathematical Library Procedures IEEE
-
-
-
- IEEE 754 defines logb(+_infinity) = +infinity and logb(0) =
- -infinity, requires the latter to signal Division-by-Zero.
- But on a VAX, logb(0) = 1.0 - 2.0**31 = -2,147,483,647.0.
- And if the correct value of scalb(x,n) would overflow on a
- VAX, it returns the reserved operand and sets _e_r_r_n_o to
- ERANGE.
-
- SSEEEE AALLSSOO
- floor(3M), math(3M), infnan(3M)
-
- AAUUTTHHOORR
- Kwok-Choi Ng
-
- BBUUGGSS
- Should drem(x,0) and logb(0) on a VAX signal invalidity by
- setting _e_r_r_n_o = EDOM? Should logb(0) return -1.7e38?
-
- IEEE 754 currently specifies that logb(denormalized no.) =
- logb(tiniest normalized no. > 0) but the consensus has
- changed to the specification in the new proposed IEEE stan-
- dard p854, namely that logb(x) satisfy
- 1 <_ scalb(|x|,-logb(x)) < Radix ... = 2 for IEEE 754
- for every x except 0, infinity and _N_a_N. Almost every pro-
- gram that assumes 754's specification will work correctly if
- logb follows 854's specification instead.
-
- IEEE 754 requires copysign(x,_N_a_N) = +_x but says nothing
- else about the sign of a _N_a_N. A _N_a_N (_Not _a _Number) is simi-
- lar in spirit to the VAX's reserved operand, but very dif-
- ferent in important details. Since the sign bit of a
- reserved operand makes it look negative,
- copysign(x,reserved operand) = -x;
- should this return the reserved operand instead?
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sprite v1.0 May 12, 1986 2
-
-
-
-